package publicacoes;


public class RepositorioPublicacoesArray implements RepositorioPublicacoes {

	private Publicacao[] publicacoes;

	private int indice;

	public RepositorioPublicacoesArray(int tamanho) {
		publicacoes = new Publicacao[tamanho];
		indice = 0;
	}

	public void inserir(Publicacao publicacao) {
		publicacoes[indice] = publicacao;
		indice = indice + 1;
	}

	public void atualizar(Publicacao publicacao) throws PublicacaoNaoEncontradaException {
		int i = getIndicePublicacao(publicacao.getTitulo());
		if (i == indice) {
			throw new PublicacaoNaoEncontradaException();
		} else {
			publicacoes[i] = publicacao;
		}
	}

	public void remover(String titulo) throws PublicacaoNaoEncontradaException {
		int i = getIndicePublicacao(titulo);
		if (i == indice) {
			throw new PublicacaoNaoEncontradaException();
		} else {
			publicacoes[i] = publicacoes[indice - 1];
			indice = indice - 1;
		}
	}

	public Publicacao procurar(String titulo) throws PublicacaoNaoEncontradaException {
		Publicacao resposta;
		int i = getIndicePublicacao(titulo);
		if (i == indice) {
			throw new PublicacaoNaoEncontradaException();
		} else {
			resposta = publicacoes[i];
		}
		return resposta;
	}

	public boolean existe(String titulo) {
		boolean resposta;
		int i = getIndicePublicacao(titulo);
		if (i == indice) {
			resposta = false;
		} else {
			resposta = true;
		}
		return resposta;
	}

	private int getIndicePublicacao(String titulo) {
		String n;
		boolean achou = false;
		int i = 0;
		while ((!achou) && (i < indice)) {
			n = publicacoes[i].getTitulo();
			if (n.equals(titulo)) {
				achou = true;
			} else {
				i = i + 1;
			}
		}
		return i;
	}

	public IteratorPublicacoes getIterator() {
		return new IteratorPublicacoesArray(this.publicacoes);
	}
}
